/**
 * @file: ProgramaPincipal.cpp
 * @author: Ing. Mauricio Del Carpio
 * @date: MAY-29-2009.
 * @desc: Programa principal, incia al juego, crea jugadores, crea mesas
 */

#include "ProgramaPrincipal.h"
#include "Juego.h"

#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

ProgramaPrincipal ProgramaPrincipal::_instancia;


/**
* Numero de jugadores reales en el juego
* este parametro es iniciado desde consola
* por el usuario
*/
unsigned int numJugadorReal;

/**
* Numero de jugadores virtuales en el juego
* este parametro es iniciado desde consola
* por el usuario
*/
unsigned int numJugadorVirtual;

/**
* Guarda el stream del teclaso ingresado por el usuario
*/
string entradaTeclado;

/**
* Objeto encargado de simular el juego
*/

Juego juego;

ProgramaPrincipal* ProgramaPrincipal::getInstance()
{
    return &_instancia;
}

ProgramaPrincipal::ProgramaPrincipal()
{

}

ProgramaPrincipal::~ProgramaPrincipal()
{

}
//TODO:CR: deberia poder controlar el numero de jugadores maximo por mesa no se puede recibir mas de 9 (e.g. controlar jugador maximo 9)
void ProgramaPrincipal::iniciarPrograma()
{
	cout << "Bienvenido al juego" << endl;
	
	do
	{
		cout << "Por favor ingrese el numero de jugadores reales:" << endl;
		
		cin >> entradaTeclado;
		
		if(esSoloDigito(entradaTeclado))
		{
			numJugadorReal = atoi(entradaTeclado.c_str());
			
			break;
		}
		else
		{
			cout << "La entrada solo puede contener digitos" << endl;
		}
	}
	while(true);
	
	do
	{
		cout << "Por favor ingrese el numero de jugadores virtuales:" << endl;
		
		cin >> entradaTeclado;
		
		if(esSoloDigito(entradaTeclado))
		{
			numJugadorVirtual = atoi(entradaTeclado.c_str());
			
			break;
		}
		else
		{
			cout << "La entrada solo puede contener digitos" << endl;
		}
	}
	while(true);
	
	juego = new Juego(numJugadorReal, numJugadorVirtual);	
	
	juego->iniciar();

}

/**
 * Valida si una cadena solo contiene digitos
 * @param[in] string linea cadena de caracteres a validar
 * @return false si algun carater no es digito caso contrario true
 */
bool esSoloDigito(string linea) {

	char caracter;
	
	int longitud = (int) linea.size();
	
	for (int indice = 0; indice < longitud; indice++)
	{
		caracter = linea[indice];
		
		if(!isdigit(caracter))
		{
			return false;
		}
	}
	return true;
}
